Date: Tue, 26 Nov 1996 18:40:35 GMT
Server: NCSA/1.5.1
Last-modified: Wed, 09 Oct 1996 18:30:36 GMT
Content-type: text/html
Content-length: 27656

<html>
<HEAD>
<TITLE>CS 60:  Principles of Computer Science</TITLE>
</HEAD>
<BODY>
URL http://www.cs.hmc.edu/~keller/cs60f96.html
<!-- (Link to <!WA0><a href = "http://www.cs.hmc.edu/~keller/cs60s96index.html">INDEX page</a>). -->
<center>
<H4>
<!WA1><a href = "http://www.hmc.edu/">Harvey Mudd College</a>, Fall 1996</H4>
<H2>
<!WA2><A HREF="http://www.cs.hmc.edu/index.html">Computer Science</A> 60</h2>
<h1>Principles of Computer Science</h1>
<h2>Home Page and Reference Card</h2>
</H2>
</center>

<h3>
Index <!WA3><a href="http://www.cs.hmc.edu/Architext/AT-newquery.html"><strong>Search</strong></a>
</h3>
  <ul>
  <li><!WA4><a href = "http://www.cs.hmc.edu/~keller/cs60assignments.html">Assignments</a>
  <li><!WA5><a href = "http://www.cs.hmc.edu/~keller/cs60slides.html">Lecture Slides (partial)</a>
  <li><!WA6><a href = "http://www.cs.hmc.edu/~keller/cs60examples.html">Examples</a>
  <li><!WA7><a href = "http://www.cs.hmc.edu/~keller/handbook-errors.txt">Book errata</a>
  <li><!WA8><a href = "http://www.cs.hmc.edu/~keller/Java.html">Keller's Java index</a>
  <li><!WA9><a href = "http://www.cs.hmc.edu/FAQ/qref/rcs.html">RCS</a>
  <li><!WA10><a href = "http://www.cs.hmc.edu/~keller/rex.html">rex reference card</a>
  <li><!WA11><a href = "#personnel">Personnel</a>
  <li><!WA12><a href = "#catalog">Catalog Description</a>
  <li><!WA13><a href = "#goals">Course Goals</a>
  <li><!WA14><a href = "#text">Texts</a>
  <li><!WA15><a href = "#assumptions">Course Assumptions</a>
  <li><!WA16><a href = "#is_programming">Is this a programming course?</a>
  <li><!WA17><a href = "#lectures">Lectures</a>
  <li><!WA18><a href = "#threads">Threads</a>
  <li><!WA19><a href = "#resources">Resources</a>
  <li><!WA20><a href = "#grading">Grading</a>
  <li><!WA21><a href = "#tutoring">Tutoring</a>
  <li><!WA22><a href = "#your_directory">Your Directory ~/cs60</a>
  <li><!WA23><a href = "#honor_code">Honor Code Standard</a> (<em>Please read this carefully</em>.)
  <li><!WA24><a href = "#grading_weights">Grading Weights</a>
  <li><!WA25><a href = "#late">Late Assignment Policy</a>
  <li><!WA26><a href = "#outline">Topic Outline</a>
  <li><!WA27><a href = "#submitting_assignments">How to submit assignments</a>
  </ul>

<h3>
<a name = "personnel">Course Personnel</a>
</h3>
  <ul>
  <li>Instructor: <!WA28><a href = "http://www.cs.hmc.edu/~keller">Robert Keller</a>,
242 Olin (4-5 p.m. MTuW or by appt.), <!WA29><a href="mailto:keller@muddcs">keller@muddcs</a>, x 18483
  <br>
  <li>System administrator: <!WA30><a href = "http://www.cs.hmc.edu/~quay">Quay Ly</a>, 101 Beckman, <!WA31><a href="mailto:quay@muddcs">quay@muddcs</a>, x 73474
  <br>
  <li>Secretary: <!WA32><a href = "http://www.cs.hmc.edu/~nancy">Nancy Mandala</a>, 240 Olin (1-5 M-F), <!WA33><a href="mailto:nancy@muddcs">nancy@muddcs</a>, x 18225
  <li>Mascot: <!WA34><a href = "http://www.cs.hmc.edu/~keller/rex.html"><em>rex</em></a>
  <br>
  <li>CS60 specific help: email to <!WA35><a href="mailto:cs60help@muddcs.cs.hmc.edu">cs60help@muddcs.cs.hmc.edu</a>
  <br>
  <li>General system help: email to <!WA36><a href="mailto:help@muddcs.cs.hmc.edu">help@muddcs.cs.hmc.edu</a>
  <br>

  <listing>

  </listing>
  <p>
  <li>Tutor/Graders:
    <table border=1 cellpadding=2>
    <tr>
    <td width = 40%>
    <!WA37><a href = "http://dragon.st.hmc.edu">Drew Bernat</a> '99
    </td>
    <td width = 10%>
    x74849
    </td>
    <td width=40%><!WA38><a href="mailto:abernat@muddcs">abernat@muddcs</a>
    </td>
    </tr>

    <tr><td><!WA39><a href = "http://ziggy.st.hmc.edu/~mdharm/">Matt Dharm</a> '98
    </td>
    <td>
    x74853
    </td>
    <td>
    <!WA40><a href="mailto:mdharm@muddcs">mdharm@muddcs</a>
    </td>
    </tr>

    <tr><td><!WA41><a href = "http://www3.hmc.edu/~keustice/">Kevin Eustice</a> '99
    </td>
    <td>
    x72482
    </td>
    <td>
    <!WA42><a href="mailto:kevin@muddcs">kevin@muddcs</a>
    </td>
    </tr>

    <tr><td><!WA43><a href = "http://www.cs.hmc.edu/~egordon/">Elizabeth Gordon</a> '99
    </td>
    <td>
    x74910
    </td>
    <td>
    <!WA44><a href="mailto:egordon@muddcs">egordon@muddcs</a>
    </td>
    </tr>

    <tr><td><!WA45><a href = "http://www3.hmc.edu/~iseggev/">Itai Seggev</a> '99
    </td>
    <td>
    x74266
    </td>
    <td>
    <!WA46><a href="mailto:itai@muddcs">itai@muddcs</a>
    </td>
    </tr>
    </table>

  <p>
  <li><a name = "tutor_hours"></a>Tutor Hours, in 102 Beckman:

    <table border=1 cellpadding=2>
    <tr>
    <th width = 7%>
    Hours
    </th>
    <th width = 14%>
    Monday
    </th>
    <th width = 14%>
    Tuesday
    </th>
    <th width = 14%>
    Wednesday
    </th>
    <th width = 14%>
    Thursday
    </th>
    <th width = 14%>
    Friday
    </th>
    <th width = 14%>
    Saturday
    </th>
    </tr>
    
    <tr> 
    <td>
    10-11
    </td>
    <td> <!-- Mon -->
    </td>
    <td> <!-- Tue -->
    Matt
    </td>
    <td> <!-- Wed -->
    </td>
    <td> <!-- Thu -->
    Matt
    </td>
    <td> <!-- Fri -->
    </td>
    <td> <!-- Sat -->
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    <tr> 
    <td>
    11-12
    </td>
    <td> <!-- Mon -->
    </td>
    <td> <!-- Tue -->
    Matt
    </td>
    <td> <!-- Wed -->
    </td>
    <td> <!-- Thu -->
    Matt
    </td>
    <td> <!-- Fri -->
    </td>
    <td> <!-- Sat -->
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    <tr>
    <td>
    12-1
    </td>
    <td> <!-- Mon -->
    </td>
    <td> <!-- Tue -->
    </td>
    <td> <!-- Wed -->
    </td>
    <td> <!-- Thu -->
    </td>
    <td> <!-- Fri -->
    </td>
    <td> <!-- Sat -->
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    <tr>
    <td>
    1-2
    </td>
    <td> <!-- Mon -->
    </td>
    <td> <!-- Tue -->
    </td>
    <td> <!-- Wed -->
    </td>
    <td> <!-- Thu -->
    </td>
    <td> <!-- Fri -->
    Kevin
    </td>
    <td> <!-- Sat -->
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    <tr>
    <td>
    2-3
    </td>
    <td> <!-- Mon -->
    </td>
    <td> <!-- Tue -->
    </td>
    <td> <!-- Wed -->
    </td>
    <td> <!-- Thu -->
    </td>
    <td> <!-- Fri -->
    Kevin
    </td>
    <td> <!-- Sat -->
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    <tr>
    <td>
    3-4
    </td>
    <td> <!-- Mon -->
    Lecture
    </td>
    <td> <!-- Tue -->
    Drew (2:30)
    </td>
    <td> <!-- Wed -->
    Lecture
    </td>
    <td> <!-- Thu -->
    Drew (2:30)
    </td>
    <td> <!-- Fri -->
    Beth
    </td>
    <td> <!-- Sat -->
    Beth
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    <tr>
    <td>
    4-5
    </td>
    <td> <!-- Mon -->
    Office Hrs.
    </td>
    <td> <!-- Tue -->
    Drew (to 4:30)+ Office Hrs.
    </td>
    <td> <!-- Wed -->
    Office Hrs.
    </td>
    <td> <!-- Thu -->
    Drew (to 4:30)
    </td>
    <td> <!-- Fri -->
    Beth
    </td>
    <td> <!-- Sat -->
    Beth
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    <tr>
    <td>
    5-6
    </td>
    <td> <!-- Mon -->
    </td>
    <td> <!-- Tue -->
    </td>
    <td> <!-- Wed -->
    </td>
    <td> <!-- Thu -->
    </td>
    <td> <!-- Fri -->
    </td>
    <td> <!-- Sat -->
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    <tr>
    <td>
    6-7
    </td>
    <td> <!-- Mon -->
    Itai
    </td>
    <td> <!-- Tue -->
    Kevin
    </td>
    <td> <!-- Wed -->
    Itai
    </td>
    <td> <!-- Thu -->
    Kevin
    </td>
    <td> <!-- Fri -->
    </td>
    <td> <!-- Sat -->
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    <tr>
    <td>
    7-8    
    </td>
    <td> <!-- Mon -->
    Itai
    </td>
    <td> <!-- Tue -->
    Kevin
    </td>
    <td> <!-- Wed -->
    Itai
    </td>
    <td> <!-- Thu -->
    Kevin
    </td>
    <td> <!-- Fri -->
    </td>
    <td> <!-- Sat -->
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    <tr>
    <td>
    8-9
    </td>
    <td> <!-- Mon -->
    </td>
    <td> <!-- Tue -->
    </td>
    <td> <!-- Wed -->
    </td>
    <td> <!-- Thu -->
    </td>
    <td> <!-- Fri -->
    </td>
    <td> <!-- Sat -->
    </td>
    <td> <!-- Sun -->
    </td>
    </tr>

    </table>
<p>
If none of these hours work for you, please let me
know.
<p>
</ul>

<a name = "location">Room 102 Beckman</a>
is where the X terminals connected to our machine muddcs are.
To find it, leave the back of the lecture hall (Beckman 126) turn right,
go up the stairs to the first door on the left.

<p>
To get to my office, enter the Olin Building from the southeast.  My 
door is <em>inside</em> 240, the CS Department Office, which is the first
door on the right.
240 is always open during business hours.
My door is usually closed to filter out noise, but don't hesitate to knock.

<P>
<h3><a name = "catalog">Catalog Description</a></h3>
<blockquote>
Introduction to principles of computer science.  Algorithms, complexity
analysis, data structuring, data and procedural abstraction, grammars, 
correctness, logic principles, processor organization, operating system 
concepts, programming languages, basic automata theory, and theoretical 
limitations.
</blockquote> 
<P>
<b><h3><a name = "goals">Course Goals</a></h3></b>

To learn and apply basic principles of computer science, including
software construction, hardware organization, and limitations of
computers.  
<P>
<b><h3><a name = "text">Texts</a></h3></b>
<ul>
<li>Robert M. Keller, <em> Principles of Computing</em>, September 1996.
Available by subscription at the cost of reproduction.
This text is being substantially revised from prior years.  It will be
available as it gets completed.  The first chapter will be free, following
which you will be given a chance to be a subscriber at a fixed estimated
cost.  Subscribers get the rest of the notes, loose-leaf and 3-hole punched.
<p>

<li>David H. Friedel, Jr. and Anthony Potts, 
<!WA47><a href = "http://165.247.175.230/cgi-bin/java.cgi?page=ibook&graphics=1#JPL">
<em>Java Programming Language Handbook</em></a>,
Coriolis Group Books, 1996, ISBN 1-883577-77-2.

<!--
The entire book is also on-line in Microsoft word on KATO, the Mac
server, in the folder KATO.HOME/Department Homes/CS/CS 60/.  It will
be thus viewable from Macs on the local network.  I will see about
getting a PC version as well.  <em>However</em>, it is <em>still</em>
recommended that you purchase the book (rather than, say getting
someone's old version) because: (1) The book has been revised
substantially since the last course offering.  (2) The book is large
(750 pages), and reading it all on the screen is apt to be tiresome
and inconvenient.  (3) The book can be taken into the exams, whereas a
Mac cannot be.
-->
</ul>

<p>
<b><h3><a name = "assumptions">Course Assumptions</a></h3></b>

Students should have had a first course in computing at the college
level (e.g. <!WA48><a href ="http://www.cs.hmc.edu/~hodas/courses/cs5/index.html">CS5</a>).  Prior experience in C or C++ is preferred although
not essential.  We will be using a number of different languages, including
<!WA49><a href = "http://java.sun.com/">Java</a>, 
a simplified derivative of C++.
It is possible to have only a knowledge of Pascal, rather than C++, when you start.
This is fine, as long as you don't freak because of language syntax.
You should know about procedures, arrays, and
types at a minimum; if you are unfamiliar with these, please take CS5, 6
or 50 first.

<a name = "is_programming">
<b><h3>Is this a "Programming Course"?</h3></b>

In a sense, it is: much of the course entails programming.
<em>However</em>, we  consider exposure
to computer science ideas to be the important part.  The intent of the
programming assignments is to drive home these key ideas.
<p>

<a name = "lectures">
<b><h3>Lectures</h3></b>

The word "lecture" below is used very loosely.  I expect that the lecture
periods will include some traditional-style lecturing, but hope it will be more like a 
multilogue (set of dialogues).  You are expected to attend, ask
questions, and provide comments.
<p>
I am planning to lecture 50-60 about minutes of the 75 minutes we have allocated
in each session.
The rest of the time will be for the purpose of answering extended questions
and going into more specifics of some of the programming techniques and
examples.  If you don't have things to ask of me in this remaining time, I may
ask some things of you (e.g. a quiz).

<b><h3><a name = "threads">Threads</a></h3></b>

There are essentially three interwoven "threads" in the course: The book,
the problems, and the lectures.  I try to keep them "in synch" with one
another, but active participation in all three threads is required.
Volume-wise, the book covers more material than can be discussed in the
lecture.  The lecture will cover some things not in the book.
Staying attune to what is going on in lecture will help you focus on
the areas in the book that are important as far as exam emphasis.  
The problems exercise some, but not all, of the
things discussed in the book and lecture.
<p>
<b><h3><a name = "resources">Course Resources</a></h3></b>

The course is planned to be interactive throughout.  We are eager to
prevent programming difficulties from consuming extraordinary time, so
please <em>ask</em> when you get stuck with such difficulties.  It is
much more efficient to <b>start early</b> on each assignment so that
you give yourself enough time to cope with the numerous contingencies
which inevitably materialize.  You can get help on-line by emailing to
cs60help@muddcs which goes to the graders/tutors and to me.  I don't
encourage use of 'talk' because it is too slow, but I check email often.  When
you email a message, it will typically be answered to the entire class
with parts of your message embedded.  <em>If you do not want it to be
attributed to you, please so indicate in your message.</em> <p> 

By carrying problem solutions through to computer implementation, you
are showing that you understand the issues, principles, and
techniques.  I or the tutors will explain to you how to work any problem, to any
level of detail, if you ask.  However, you must do so with a
sufficient time margin.  Telling us at the eleventh hour that you just
aren't getting it and therefore want to drop the course is not availing
yourself of the substantial help available.

<p> You are also welcome to submit email with any
question you'd like to have answered or any point you would like
addressed after lecture, or leave a note in my mailbox in 240
Olin.  Of course you are encouraged to ask such questions in class as
well.  

<p>
There are many tools available on muddcs itself.  Use the
'man' feature of UNIX to find what you need and to explore.  The command 
<listing>
    man <em>command</em> 
</listing>
gives information on a specific command; 
The command 
<listing>
    man -k <em>topic</em> 
</listing>
lists commands relating to a specific topic.  You can also
use the 'info' reader in GNU Emacs for certain library, language, and editor
specifics.  In Emacs type 
<listing>
    escape-X info
</listing>
Emacs is a very powerful editor which is going to be around for a long time; it
is highly encouraged that you learn to use it.
Helpful information, examples, on-line copies of
assignments, etc. will be kept in various subdirectories of the
directory 
<listing>
    <!WA50><a href = "http://www.cs.hmc.edu/~keller/cs60">/cs/cs60</a>
</listing>
on machine muddcs.  There is a web page for <!WA51><a href
= "http://www.cs.hmc.edu/rex.html"><em>rex</em></a> and <!WA52><a href = "http://www.cs.hmc.edu/~keller/isc.html">ISCAL</a> documentation.  Finally, the "corner
store" maxim applies: <em>If you can't find what you want, ask for
it.</em> <P> 

<b><h3><a name = "grading">Grading</a></h3></b>
There will be approximately six graded assignments, most entailing programming.
Programming assignments help drive home key working concepts and
principles.  Assignments vary in difficulty and will not necessarily be equally
weighted.  There will also be some assignments which you will not submit, but
should do anyway because they will help you with other assignments.
The languages for the graded assignments will probably be one in rex, two in Java,
one in C++, one in Prolog,
and one in assembly language (<!WA53><a href = "http://www.cs.hmc.edu/~keller/isc.html">ISCAL</a>, for a simulated machine).  
Sufficient information about the languages will be
provided to enable you to complete the assignments; you do not have to know these
languages when you enter the class.
<P>
Here is the nominal point breakdown we use on assignments.  This may vary somewhat,
depending on the emphasis of the assignment.
  <ul>
    <li>40% for general correctness:
    <p>
        The program should run according to specification,
        taking into account any DWIM (do-what-I-mean) situations
        (e.g. The professor says one thing but really meant something
        different;  Hopefully he or someone will catch this and
        say something about it before it goes too far.)
     <p>
        We are a learning community here, so don't just be silent about 
        things that you think are errors.
     <p>
        
    <li>20% for choice or discovery of algorithm:
    <p>
        Sometimes the algorithm is given.  However, sometimes
        such clues are ignored, resulting in loss of points
        unnecessarily or unnecessary floundering.
    <p>
        Some people find a better way than what was suggested.
        They get extra credit, at grader's discretion.  
    <p>
        (Note: "better" does not mean more obscure or
        cleverly hacked-up, but rather more elegant,
        or substantially more efficient.)
    <p>

    <li>20% for documentation:
    <p>
        Comments should be included in the code which expose the method,
        any subtleties, etc.
    <p>

    <li>10% for style:
    <p>
        The code should be readable without extraordinary effort.
        Use spacing, braces, etc. to improve readability.
        Layout characters are not at a premium, so use them liberally.
    <p>

    <li>10% for robustness:
    <p>
        The program should not break in unusual ways for minor input
        aberrations.
    <p>
  </ul>
Remember, you can always ask about things before you submit your actual product.
There is no reason to lose points on most of the above.  
You also lose no points or esteem for asking.
<p>

<b><h3><a name = "tutoring">Tutoring</a></h3></b>
The tutors are expected to play a key role in the course.  Everyone will need to interact
with a tutor, even if you don't need help:

  <ul>
  <li> You will "check in" with your tutor
  on a regular basis, and show him/her your progress.  Checking in will be
  a part of your grade.
  <p>

  <li> Your tutor will advise you on your approach to solving the problem,
  documentation, and presentation.
  <p>

  <li> Your tutor will make an evaluation of your work when you are ready
  to submit it, and recommend a grade to me.
  <p>

  <li> I will assign the grade for the assignment, based on the tutor's 
  recommendation, although I am not bound to follow the recommendation
  100%.
  </ul>
<p>
Neither I nor the tutors are your adversaries.  We want you to succeed, but it
requires effort, cooperation, and timing on your part.
<P>

<b><h3><a name = "your_directory">Your Directory ~/cs60</a></h3></b>
You should have a directory ~/cs60 which has group access by group cs60.
If not, the system administrator will create one for you.  Access to this
directory will thus be by you, the instructor, and the tutors, but preferrably
no one else.  When properly setup the directory listing, obtained by ls -l, for
this directory should look like:
<listing>
   2 drwxrwx---   2 <em>yourid</em>     cs60         512 Sep  8 20:32 cs60/
</listing>
If it does not, you should execute the following command from your home directory:
<listing>
   chmod 770 cs60
</listing>
The purpose of
this directory is to be able to get help on programs without mailing the program.
Simply indicate the file name to the instructor or tutor.  He or she can connect
to the directory and write things there.  It is not necessary that you keep all
of your work accessible there, just the things on which you are currently working.

<b><h3><a name = "honor_code">Honor Code Standard (<em>Please read this carefully</em>.)</a></h3></b> 

Although <em>discussion</em> of problems with others is encouraged,
programming in CS60 emphasizes individual learning, not group
projects.  We observe the following Standard:  "You may <em>discuss</em> the
assignment with other students.  You may not
share [<em>i.e. give or receive</em>]
written work of any kind, inside or outside the course".
Elaboration:  In the case of programming assignments, we consider
"written work" to include email, computer files, fragments of files, and printed output.
In developing code for a programming assignment, you can
discuss ideas with others, but discussion of ideas
must not involve wholesale examination or 
transcription of the actual working code of
others, with the exception that you may use any code explicitly
provided by the instructor. 
<p>
The following types of activities have occurred in the past.  They have, in
most cases, resulted in receiving a failing grade in the course, 
one or more appearances before the judicial board (with the attendant
blighted record), and in some cases eventual ITR (Ineligible to Register) status.
<ul>
<li>
Two or more students split up an assignment, then transcribe each others' contributions,
sometimes changing names of variables, comments, formatting, etc.  
<p>
<li>
A student browses the directories of other students and finds someone's
homework file unprotected.  He makes a copy of the file and edits it
as above to try to make it look like his own.
</ul>
You would be surprised how easy it is for a grader to spot violations.
<strong>If you have any doubts about whether a form of
interaction constitutes a violation of this standard, please consult
with me prior to continuing.</strong>
<p>
If you get significant, but legitimate, help from another, you should acknowledge
it on your submission.  You do not lose credit for this.  It is only
proper to acknowledge the other person.
<P>

<b><h3><a name = "grading_weights">Grading Weights</a></h3></b>
Here is how your overall grade is determined:
<ul>
<li>50% programming assignments

<li>25% final-examination

<li>15% mid-term examination

<li>10% attendance, participation, tutor-checkin, and random quizzes
</ul>
Exams are open book and emphasize conceptual understanding, rather
than memorization of fine details.  
<P>

<b><h3><a name = "late">Late Assignment Policy</a></h3></b>

Submissions are done by following the <!WA54><a href="#submitting_assignments">instructions below</a>,
which also establishes the time of submission.
The due dates on assignments should be noted carefully.
The work of an assignment should be conducted in the week or weeks
before, not on the last day when there is no space for the necessary
thinking.  
<p>

<b><h3>Automatic Grace</h3></b>
There is an automatic, fixed, one-day grace period on all assignments.  
In other words, if the due date
states day N, then the assignment must be turned in before midnight on
day N+1 to receive any credit.  After midnight on day N+1 work you
spend on the problem is for you own edification only (which is not 
to say that it isn't worth doing or required; you just don't get
points for it then).  It is best to plan to get the assignments in
on the stated due date.
<P>
<b><h3><a name = "outline">CS 60 Topic Outline</a></h3></b>

The lectures will roughly follow this outline.  The progression is at
the rate of about two of the numbered topics below per week.  I should
say that this is what I would <em>like</em> to do.  Depending on background,
some of the topics expand to longer than allocated, with the result
that other topics get jettisoned or fall off the end.  Please keep up
on the reading without it being explicitly assigned.  The notes
generally expand on the lectures and discussions.  But the lectures
may also expand on the notes or introduce new material.  More often
than not, several threads will be interwoven in the lectures over a
period of time, in part to emphasize the commonality of concepts from
different vantage points.  Brackets below indicate where chapters in
the notes start with respect to the concepts that follow.  The outline
does not mention every topic.  The actual lectures determine points of
emphasis.
<P>
<ol>
<li>[<em>Information structures</em>].
List notation.   Trees and Graphs.
<p>

<li>[<em>High-level functional programming</em>].  
Higher-order functions.  Anonymous functions.  Equivalences.
<p>

<li>[<em>Low-level functional programming</em>].
Rewrite rules.  Recursion.  Mutual recursion.  Depth-first 
and breadth-first search of trees and graphs.
Caching. 
<p>

<li>[<em>States and Transitions</em>].Computation problems and models of
computation. Assignment-based programs.  McCarthy's transformation.  Turing
machines.
RAM model.  Arrays.  Linear addressing principle.  Pointers.  L-values and R-values.  
<P>

<li>[<em>Computing Objectively</em>]  Object-orientation and data abstraction.
Java objects.  Inheritance.
<P>

<li>[<em>Structural Computing</em>] The Polya library.  Translating rex to Java.  
S expressions.  Low-level data structuring.  Dynamic storage
allocation.  Open- vs. closed-list models
<P>

<li>[<em>Computing Grammatically</em>]  Inductive definitions, grammars,
syntax.  Parsing. Evaluation.  
<P>

<li>[<em>Computing Logically</em>]  Proposition logic and applications.  Gate
realizations.  Physical bases for computation.  Minterm expansion.  Boole/Shannon expansion.
<P>

<li>Logic simplification.  Hypercubes. Karnaugh maps.  "Don't care"
situations. 
<P>

<li>Predicate logic.  Programming in logic.  Backtracking. 
<P>

<li>Program specification, correctness, and verification.
<P>

<li><a name = "midterm">Mid-term examination</a>.  (<b>Date of Midterm: Wednesday, 30 October 1996</b>).
<P>

<li>[<em>Complexity of computing</em>]  Runtime measures. Profiling.
Growth-rate comparisons.  Upper bounds.  "O" notation.   Examples from
sorting: Heapsort, radix sort.
<P>

<li>Complexity (continued).  Empirical measurements.  Amdahl's law.  
Set abstraction examples.  Bit-vectors.
<P>

<li>Weighted graphs.  Shortest paths.  Traveling salesman problem.
<P>

<li>[<em>Finite-State Computing</em>]  Finite-state machines.  Sequential
logic design.  Physical basis for memory.
<P>

<li>Regular expressions and finite-state machines.
<P>

<li>Computer components.  Registers, buses, multiplexors, etc.
<P>

<li>[<em>Stored-Program Computing</em>]  
Stored-program computer structure.  ISC (Incredibly-Simple Computer).
<P>

<li>ISC Assembly language.  Low-level implementation of recursion.
<P>

<li>[<em>Computing in Parallel</em>]  Parallel computation.  Multi-threading.  Networking.
<P>

<li>[<em>Limitations of Computing</em>] Finite-state limitations.  Lower
bounds.  Incomputability.  Intractability and NP-completeness.   
The glitch phenomenon.
<P>
<li><a name = "final">Comprehensive final exam</a> (<b>Date of Final: Monday, 16 December 1996</b>).
</ol>

<b><h3><a name = "submitting_assignments">How to submit assignments:</a></h3></b>

To submit an assignment, login to muddcs and run
<listing>
    cs60submit <em>filename</em>
</listing>
where <em>filename</em> is the file containing the assignment to be submitted.  
The file should be an non-encoded ascii file with at most 80 characters per line.
The program will ask what assignment this is (a number), and then submit the
assignment properly.  Shortly thereafter (usually a few seconds), you
will recieve by e-mail an exact copy of what was submitted.  You
will notice that some headers are attached, containing certain
essential information.  These headers are commented out so that compilation
of the program is not affected.  If what you recieve is not
acceptable (e.g. becomes MIME encoded because it is more than 80 columns or contains
control characters), you are responsible for noticing this
immediately, correcting the file, and re-submitting it.  All submissions
will be kept for archival purposes, but only the latest submission before
the time deadline will be graded.

</html>
